let arr = [1, 2, 3, 4, [1, 2], [3, 4, [5, 6]]]

// 最优方法，数组自带 flat()
// 数组扁平方法1，数组的 flat()，传入参数Infinity
const flatArr1 = (arr: Array<any>): Array<number> => {
    return arr.flat(Infinity)
}
// console.log(flatArr(arr), 'flatArr1');

// 数组扁平方法2，递归，判断当前便利的item是不是数组，是的话，递归concat加入到新数组中，不是的话直接push到新数组中
const flatArr2 = (arr: Array<any>): Array<number> => {
    let newArr = []
    arr.map((item, i) => {
        if (Array.isArray(item)) {
            newArr = newArr.concat(flatArr2(item))
            // newArr = newArr.concat(item)
        } else {
            newArr.push(item)
        }
    })
    return newArr
}
// console.log(flatArr2(arr), 'flatArr2');

// 数组扁平方法3，用数组的reduce()方法，与上一个方法类似，只是不需要新定义一个数组，reduce的第二个参数可以指定初始值
const flatArr3 = (arr: Array<any>): Array<number> => {
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatArr3(cur) : cur)
        // return pre.concat(cur)
    }, [])
}
// console.log(flatArr3(arr), 'flatArr3');

// 数组扁平方法4，调用数组的toString()方法
const flatArr4 = (arr: Array<any> | string): Array<number> => {
    arr = arr.toString()
    return arr.split(',').map(item => Number(item))
}
// console.log(flatArr4(arr), 'flatArr4');

// 数组扁平化方法5，调用JSON.stringify和正则表达式
const flatArr5 = (arr: Array<any> | string): Array<number> => {
    arr = JSON.stringify(arr).replace(/\[|\]/g, '')
    return arr.split(',').map(item => Number(item))
}
// console.log(flatArr5(arr), 'flatArr5');

// 数组扁平化方法6，调用toString和JSON.parse方法
const flatArr6 = (arr: Array<any> | string): Array<number> => {
    arr = arr.toString()
    return JSON.parse('[' + arr + ']')
}
// console.log(flatArr6(arr), 'flatArr6');


// push方法暂时无法实现
// const getEvery = (a) => {
//     // return () => {
//         for (let i = 0; i < a.length; i++) {
//             console.log(a.length);
//             return a[i]
//         }
//     // }
// }

// const flatArr7 = (arr) => {
//     return arr.reduce((pre, cur) => {
//         pre.push(Array.isArray(cur) ? flatArr7(cur) : cur)
//         console.log(cur);

//         return pre
//     }, [])
// }
// console.log(flatArr7(arr));